urls.py str有可以用int
path('personal_info<str:name>/', views.personal_info, name='personal_info'),
views.py str:後面的名稱要與request後面的參數名稱相同
def personal_info(request, name):
student = Student.objects.filter(name=name).first()
return render(request, 'personal_info.html', context=locals())
student_list.html url引號完後空白+變數
{% for student in students %}
<a href="{% url 'app:personal_info' student.name%}">{{student.name}}</a>
<br>
{% endfor %}
用這種路由規則要小心,如果前面不加personal_info,而是只有<str:name>
的話,它可能就會匹配錯誤的path,它是按照順序,由上往下匹配的,舉個例子
假設依照下面的路由,那你不管訪問任何網址,都只會跑到views.personal_info的頁面
path('<str:name>/', views.personal_info, name='personal_info'),
path('hello_world/', views.hello_world),
path('student_list/', views.student_list, name='student_list'),
對了前面忘記提到(用get的方式傳值),只要是在路由跟參數有關西,盡量都要設置一個default值,不然別人修改你的網址很容易出現伺服器錯誤的代碼500(但是404沒關西),或是出現資料空白的情況